/*--------------------------------------
文件名称：log.h
文件功能：日志系统头文件
说明：定义日志系统的接口和数据结构
--------------------------------------*/
#ifndef LOG_H
#define LOG_H

#include <stdio.h>
#include <stdarg.h>
#include <time.h>

/* 定义日志开关宏 
 * 0 = 禁用日志输出（仅提供空函数实现）
 * 1 = 启用日志输出
 * 可通过编译选项 -DLOG_ENABLE=0 禁用日志
 */
#ifndef LOG_ENABLE
#define LOG_ENABLE 1
#endif

/*--------------------------------------
类型定义：log_level_t
功能：定义日志级别枚举类型
说明：从TRACE到FATAL的6个日志级别
--------------------------------------*/
typedef enum
{
    LOG_TRACE,
    LOG_DEBUG,
    LOG_INFO,
    LOG_WARN,
    LOG_ERROR,
    LOG_FATAL
} log_level_t;

// 日志级别名称
extern const char *level_names[];

// 日志级别颜色 (ANSI转义序列)
extern const char *level_colors[];

// 当前日志级别
extern log_level_t g_log_level;

// 日志文件
extern FILE *g_log_file;

/*--------------------------------------
函数名称：log_set_level
函数功能：设置日志级别
输入参数：log_level_t level - 要设置的日志级别
输出参数：None
说明：设置全局日志级别，低于此级别的日志将被忽略
--------------------------------------*/
void log_set_level(log_level_t level);

/*--------------------------------------
函数名称：log_set_file
函数功能：设置日志输出文件
输入参数：const char *filename - 日志文件路径
输出参数：int - 成功返回1，失败返回0
说明：设置日志输出到指定文件，如果文件已存在则追加
--------------------------------------*/
int log_set_file(const char *filename);

/*--------------------------------------
函数名称：log_close_file
函数功能：关闭日志文件
输入参数：None
输出参数：None
说明：关闭当前打开的日志文件
--------------------------------------*/
void log_close_file(void);

/*--------------------------------------
函数名称：log_log
函数功能：记录日志
输入参数：
    log_level_t level - 日志级别
    const char *file - 源文件名
    int line - 源文件行号
    const char *fmt - 格式化字符串
    ... - 可变参数
输出参数：None
说明：内部日志记录函数，被其他日志函数调用
--------------------------------------*/
void log_log(log_level_t level, const char *file, int line, const char *fmt, ...);

/*--------------------------------------
函数名称：log_trace
函数功能：记录TRACE级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录调试跟踪信息
--------------------------------------*/
void log_trace(const char *fmt, ...);

/*--------------------------------------
函数名称：log_debug
函数功能：记录DEBUG级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录调试信息
--------------------------------------*/
void log_debug(const char *fmt, ...);

/*--------------------------------------
函数名称：log_info
函数功能：记录INFO级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录一般信息
--------------------------------------*/
void log_info(const char *fmt, ...);

/*--------------------------------------
函数名称：log_warn
函数功能：记录WARN级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录警告信息
--------------------------------------*/
void log_warn(const char *fmt, ...);

/*--------------------------------------
函数名称：log_error
函数功能：记录ERROR级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录错误信息
--------------------------------------*/
void log_error(const char *fmt, ...);

/*--------------------------------------
函数名称：log_fatal
函数功能：记录FATAL级别日志
输入参数：const char *fmt - 格式化字符串，... - 可变参数
输出参数：None
说明：记录致命错误信息
--------------------------------------*/
void log_fatal(const char *fmt, ...);

#endif /* LOG_H */